Códigos correctores de errores y criptografía



In [2]:
# Para evitar los warnings de python
import warnings
warnings.filterwarnings('ignore')
%reload_ext sage

Creación del polinomio Goppa



In [3]:
# Definimos el cuerpo donde vamos a trabajar
m = 4
K = GF(2)
F.<a> = GF(2^m)

In [6]:
# Creamos el anillo de polinomios
PR = PolynomialRing(F,'X') 
X = PR.gen()
N = 15
L = [a^i for i in range(N)]
g = X^3 + X + 1

In [4]:
# Imprimimos el polinomio que hemos creado
print ("Polinomio de Goppa \n\n\t g(x)= " + str(g))


Polinomio de Goppa 

	 g(x)= X^3 + X + 1

Creación de la matriz generatriz H



In [5]:
# Declaración de variables
rango = 3

Comenzamos creando la matriz T


In [6]:
T = matrix(F,rango,rango)
for i in range(rango):
    count = rango - i + 1 - 1
    for j in range(rango):
        if i > j:
            T[i,j]=g.list()[count]
            count = count + 1
        if i < j:
            T[i,j] = 0
        if i == j:
            T[i,j] = 1

In [7]:
print ("Matriz T: ")
show(T)


Matriz T: 
Out[7]:

Definimos ahora nuestras matriz Y y Z


In [9]:
Y = matrix([[L[j]^i for j in range(N)] for i in range(rango)]) # La matriz Y es de tamaño (rango x n : rango=3 filas y n columnas)
show(Y)


Out[9]:

In [10]:
Z = diagonal_matrix([1/g(L[i]) for i in range(N)]) # La matriz Z sabemos es diagonal y de tamaño n x n.
show(Z)


Out[10]:

Calculamos ahora la matriz H generadora del código


In [11]:
H = T*Y*Z
show(H)


Out[11]:

In [0]: